<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script type="module">
setup({allow_uncaught_exception: true });

// Keep FinalizationRegistry global to avoid it being reclaimed by garbage
// collections that may happen until the registry is processed in microtasks.
let fr;

async_test(t => {
  window.onerror = t.step_func_done(function(msg, source, lineno, colno, e) {
    assert_equals(e.message, 'weakrefs are awesome',
                  'Correct exception is thrown');
  });

  function callback(holdings) {
    throw new Error('weakrefs are awesome');
  }

  fr = new FinalizationRegistry(callback);

  (function() {
    let garbage = {};
    fr.register(garbage, 'holdings');
    garbage = null;
  })();

  gc();
}, 'FinalizationRegistry callback exceptions are reported to error handler');
</script>
